
<?php

session_start();

include dirname(__FILE__) . '/constants.php';

// Si le joueur s'est inscrit
if (isset($_SESSION['pseudo'])
        && isset($_SESSION['player_score'])
        && isset($_SESSION['computer_score'])) {

    // on récupère le choix du joueur
    $player_choice = $_POST['choice'];
    // Si coup légal
    if ($player_choice == ROCK
            || $player_choice == PAPER
            || $player_choice == SCISSORS) {

        // Variable définissant le type de message envoyé
        $type = TURN;
        // on séléctionne un élément au hasard
        $computer_choice = getItem();
        // on récupère le résultat de l'affrontement
        $result = getResult($player_choice, $computer_choice);

        // Si le joueur a gagné
        if ($result == WIN) {
            // on augmente son score de la manche courante
            $_SESSION['player_score']++;
            // Si le score de la manche courante est au maximum
            if ($_SESSION['player_score'] == 2) {
                // on ajoute une manche au joueur et on initialise le score
                // à zéro
                $_SESSION['player_score'] = 0;
                $_SESSION['computer_score'] = 0;
                $_SESSION['player_round']++;
                // si le joueur a gagné 2 roud
                if ($_SESSION['player_round'] == 2) {
                    // Le type de message devient gagnant
                    $type = PLAYER_WIN;
                }
            }
            // Si le joueur à perdu
        } else if ($result == LOSE) {
            // on augmente le score de l'ordinateur de la manche courante
            $_SESSION['computer_score']++;
            // Si le score de la manche courante est au maximum
            if ($_SESSION['computer_score'] == 2) {
                // on ajoute une manche à l'ordinateur et on initialise le score
                // à zéro
                $_SESSION['player_score'] = 0;
                $_SESSION['computer_score'] = 0;
                $_SESSION['computer_round']++;
                // si l'ordinateur a gagné 2 roud
                if ($_SESSION['computer_round'] == 2) {
                    // Le type de message devient perdant
                    $type = COMPUTER_WIN;
                }
            }
        }
        // On retourne la chaine qui résume le resultat de l'affrontement
        echo $type . ':' . $_SESSION['pseudo'] . ':' . $_SESSION['player_round'] .
        ':' . $_SESSION['computer_round'] . ":" . $_SESSION['player_score'] . ':' .
        $_SESSION['computer_score'] . ':' . $player_choice .
        ':' . $computer_choice . ':' . $result;

    } else {
        echo ERROR + ":Le coup proposé est illégal ...";
    }
} else {
    echo ERROR + ":Le joueur n'a pas donné son pseudo";
}


/**
 * Renvoie le résultat de l'affrontement entre le joueur et l'ordinateur
 * @param type $choice le choix du joueur
 * @param type $computerChoice le choix de l'ordinateur
 * @return string le résultat de l'affrontement (-1 = perdant, 0 = nul, 1 = gagnant)
 */
function getResult($choice, $computerChoice) {
    if ($choice == ROCK && $computerChoice == SCISSORS
            || $choice == PAPER && $computerChoice == ROCK
            || $choice == SCISSORS && $computerChoice == PAPER) {
        return WIN;
    } else if ($choice == $computerChoice) {
        return DRAW;
    } else {
        return LOSE;
    }
}

/**
 * Séléctione un item au hasard
 * @return string la représentation en string de l'élément sélectionné
 */
function getItem() {
    $computerChoice = rand(0, 2);
    if ($computerChoice == 0) {
        return ROCK;
    } else if ($computerChoice == 1) {
        return PAPER;
    } else {
        return SCISSORS;
    }
}

?>
   